import { NextFunction, Request, Response } from 'express';
import { Logger } from './log4js';
import { appConfig } from '../../../config/config';
import { Injectable, NestMiddleware } from '@nestjs/common';

@Injectable()
export class LoggerMiddleware implements NestMiddleware {
  use(req: Request, res: Response, next: NextFunction) {
    console.log('Request...');
    next();
  }
}
// 函数式中间件
export function logger(
  req: Request,
  res: Response,
  next: NextFunction,
  ...rang
) {
  const code = res.statusCode; //响应状态码
  next();
  // 组装日志信息
  const logFormat = `@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ${
    appConfig.serverName
  } @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 @ Request original url: ${req.originalUrl}
 @ Method: ${req.method}
 @ IP: ${req.ip}
 @ Status code: ${code}
 @ Parmas: ${JSON.stringify(req.params)}
 @ Query: ${JSON.stringify(req.query)}
 @ Body: ${JSON.stringify(
   req.body,
 )} \n @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
`;
  //根据状态码，进行日志类型区分
  if (code >= 400) {
    Logger.error(logFormat);
  } else Logger.info(logFormat);
  return logFormat;
}
